/**
 * 业务数据配置接口定义
 * @author luguoxiang
 * @date 2022/7/5
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */

/**
 * map类型
 */
export declare type Map<T> = { [p: string]: T };

/**
 * 可为数组
 */
export declare type Arrayable<T> = T | T[];

/**
 * 基础实体
 */
export interface BaseEntity {
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
  /** 创建人 */
  createBy?: string;
  /** 更新人 */
  updateBy?: string;
}

/**
 * 基于路径的树形数据
 */
export interface PathTreeEntity extends BaseEntity {
  /** 父id */
  parentId?: string;
  /** 祖先id链路 */
  ancestorLink?: string;
  /** 排序 */
  sort?: number;
}

/**
 * 基于左右值的树形数据
 */
export interface NumberTreeEntity extends BaseEntity {
  /** 父id */
  parentId?: string;
  /** 左值 */
  leftNo?: number;
  /** 右值 */
  rightNo?: number;
}

/**
 * 后端接口
 */
export interface Api {
	/**
	 * 分页查询
	 */
	query?(params: any): any | Promise<any>;
	
	/**
	 * 详情
	 */
	detail?(id: any): any | Promise<any>;
	
	/**
	 * 创建数据
	 */
	create?(data: any): void | any | Promise<any>;
	
	/**
	 * 修改数据
	 */
	update?(data: any): void | any | Promise<any>;
	
	/**
	 * 删除数据
	 */
	remove?(ids: any): void | any | Promise<any>;
	
}

export declare type QueryParams = {
    /**
     * 万能查询
     */
    $soarQuery?: {
        /**
         * 需要返回的字段
         */
        fields?: string[] | string;
        /**
         * 需要排序的字段，逆序字段前面加“-”
         */
        orderBys?: string[] | string;
        /**
         * 字段过滤
         * <= 转为 le；< 转为 lt；>= 转为 ge；> 转为 gt；
         * ** 转为 like；*= 转为 likeLeft；=* 转为 likeRight；!* 转为 notLike；
         * != 转为 ne；= 转为 eq；
         * !(v1,v2,v3...,vn) 转为 notIn；(v1,v2,v3...,vn) 转为 in；
         * !{v1,v2} 转为 notBetween；{v1,v2} 转为 between；
         * 例1：age{18,48} => age between 18 and 48
         * 例2：id(1,3,8,9) => id in(1,3,8,9)
         * 例3：name**admin => name like admin
         * 例4：code eq admin => code = admin
         */
        filters?: string[] | string;
        /**
         * 过滤参数
         */
        [p: string]: any;
    };
    /**
     * 分页页码
     */
    pageNo?: number;
    /**
     * 分页大小
     */
    pageSize?: number;
    /**
     * 查询类型，all：默认方式，list：仅返回数据，total：仅返回总记录数
     */
    queryType?: 'all' | 'list' | 'total';
    [p: string]: any;
};

export declare type GetParams = {
    (val: any): QueryParams;
};